home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / program / gcc / ixemul41.lha / ixemul-41.3 / glue / gen_debug_glue.c next >
C/C++ Source or Header  |  1995-07-03  |  950b  |  50 lines

  1. #include <sys/types.h>
  2. #include <sys/syscall.h>
  3.  
  4. #include <stdio.h>
  5.  
  6. struct syscall {
  7.   char *name;
  8.   int   vec;
  9. } syscalls[] = {
  10. #define SYSTEM_CALL(func,vec) #func, vec,
  11. #include <sys/syscall.def>
  12. #undef SYSTEM_CALL
  13. };
  14. int nsyscall = sizeof(syscalls) / sizeof (syscalls[0]);
  15.  
  16. int
  17. main()
  18. {
  19.   FILE *fp1, *fp2;
  20.   struct syscall *sc;
  21.   int i, v;
  22.  
  23.   for (i = 0, sc = syscalls; i < nsyscall; i++, sc++)
  24.     {
  25.       char name1[strlen (sc->name) + 3];
  26.     
  27.       v = -(sc->vec + 4)*6;
  28.       
  29.       sprintf (name1, "%s.s", sc->name);
  30.  
  31.       fp1 = fopen (name1, "w");
  32.       
  33.       if (!fp1)
  34.         {
  35.           perror (sc->name);
  36.           exit (20);
  37.         }
  38.  
  39.       fprintf (fp1, ".globl _%s; _%s: movel a4@(_ixemulbase:W), a0; "
  40.             "addw #%d,a0; jsr a0@; "
  41.             "tstl a4; bne Ldo_rts; "
  42.             "pea Lsuender; jmp _eeak_a_bug; "
  43.             "Ldo_rts: rts; Lsuender: .asciz \"%s\";.even\n",
  44.              sc->name, sc->name, v, sc->name);
  45.       fclose (fp1);
  46.     }
  47.   return (0);
  48. }
  49.  
  50.